

import _ from 'lodash'
import {mapState} from 'vuex';
import http from '@/utils/http.js'
import {constantList} from '@stm/views/caseAndTransaction/casedtls/config.js'
import {
  Message
} from 'bfe-ui'
const mixinList = {
  data () {
    return {
      bankObj: {
        en_US: [],
        zh_TW: []
      },  
      bankNameReadonly:[], caseHandleResultList:[]
    }
  },
  computed: {
    ...mapState({
      language: (state) => state.base.language,
      userInfo:(state)=>state.base.userInfo,
      caseList:(state)=>state.stm.caseList
    }),
  },
  methods: {
    // 查码表
    getSelectList(arr){
      let params = {
        optType: 'refresh',
        payload: arr,
        optCode:'STM006GET004'
      }
      this.$p2svr(this.$api['_01_STM006GET004'] , 'RequestPoAuth', params).then(res => {
        const temp = []
        arr.map(item => {
          _.each(_.filter(res.payload, ct => ct.paratype === item.paratype), c => {
            temp.push({
              key: c.key,
              value: c.value,
              paraLng: 'zh_TW',
              paratype: item.paratype
            })
            temp.push({
              key: c.key,
              value: c.valueEn,
              paraLng: 'en_US',
              paratype: item.paratype
            })
          })
        })
        const option = _.groupBy(temp, 'paratype')
        for(let key in option){
          this.selectObj[key] = _.groupBy(option[key], 'paraLng')
        }
      }).finally(() => {
          
      })      
    },
    // 查银行，角色  valFlag：赋值字段 code: optCode searchObj: 查询入参
    getBankIdObj(valFlag, code, searchObj){
      let params = {
        optCode: code,
        payload: {
          ...searchObj,
        },
        pageInfo: {
          pageNo: 1,
          pageSize: 1000
        }
      }
      this.$p2svr(this.$api['_01_STM006PUBLIC0100'] , 'RequestPoAuth', params).then(res => {
        const data = res.payload || []
        const temp = {
          'zh_TW': [],
          'en_US': [],
        }
        const obj = {
          bankIdObj: {key: 'bankId', value: 'bankName', valueEn: 'bankNameEn'},
          roleObj: {key: 'roleNo', value: 'roleName', valueEn: 'roleNameEn'}
        }
        data.map(item => {
          temp['zh_TW'].push({
            key: item[obj[valFlag]['key']],
            value: item[obj[valFlag]['value']],
            paraLng: 'zh_TW',
          })
          temp['en_US'].push({
            key: item[obj[valFlag]['key']],
            value: item[obj[valFlag]['valueEn']],
            paraLng: 'en_US',
          })
        })
        this[valFlag] = {
          ...temp
        }
      }).finally(() => {
          
      })      
    },
    // 路由跳转
    linkToPage (route, query) {
      // 判断路由中是否已经存在 如果已存在避免重复添加路由
      if (_.filter(this.$router.getRoutes(), (item) => item.path === route.path).length === 0) {
        let code = Math.floor(Math.random() * 10000)
        const children = {
          name: route.name,
          path: route.path,
          component: route.component,
          meta: {
            index: route.index + '.' + code,
            leaf: true,
            label: route.label[this.language]+'-' + route.labelVal,
            componentUrl: route.componentUrl,
            labelVal: route.labelVal,
            labelHis: route.label
          },
        }
        this.$router.addRoute({
          name: '/',
          path: '/',
          component: () => import(/* webpackChunkName: "layout" */'@/components/layout/Layout'),
          children: [children],
        });
        console.log(children, 'children===')
        this.$store.commit('base/ADD_DYNAMIC_ROUTE', children)
      }
      this.$router.push({
        path: route.path,
        query
      });
    },
    dyNamicRoute(route, params){//动态路由
      const {component,path,name,label,index}=route
      if ( _.filter(this.$router.getRoutes(),(it) =>it.path ===path).length === 0){
        const children = [];
        children.push({
          name:name,
          path: path,
          component:component,
          meta: {
            index: index,
            label: label[this.language],
          },
        });
        this.$router.addRoute({
          path: '/',
          name:'/',
          component: () => import('@/components/layout/Layout'),
          children: children,
        });
        console.log(this.$router.getRoutes(),'=====dyNamicRoute')
      }
      
      this.$router.push({
        name: name,
        params: {...params},
      });
    },
    baseDownload (queryForm,url) {
      //设置导出按钮状态
    
      //设置请求体参数
      const payloadData = {
        reqBody :{
          ...queryForm,  
          user:this.userInfo
        },
        reqHeader:{}
      };
      //下载文件
      http.download(url, payloadData).then(res=>{
        let contentDisposition=res.headers['content-disposition'].split('filename=');
        let fileName=contentDisposition[contentDisposition.length-1].replace(/\"/g,'');
        console.log(fileName,'====fileName')
        fileName=decodeURIComponent(fileName)
        this.downloadData(res.data, fileName)
        this.$message.success('下载成功');
      }).catch(err =>{
        this.$message.error('下载失败'+':'+err.toString());
      }).finally(()=>{
      
      });
    },
    downloadData (data, fileName) {
      let blob = new Blob([data]);
      let url = window.URL.createObjectURL(blob);
      if ('download' in document.createElement('a')) {
        let aLink = document.createElement('a');
        aLink.style.display = 'none';
        aLink.setAttribute('download', fileName);
        aLink.href = url;
        let ifres= aLink.click();
        // 下载完成移除元素
        document.body.appendChild(aLink);
        // 释放掉blob对象
        window.URL.revokeObjectURL(url);
      } else {
        window.navigator.msSaveBlob(blob, fileName);
      }
    },

    uploadCommon(url,data){
      return new Promise((resolve, reject) => {
        http.upload(url,data).then((res)=>{
          if(res.status===200&&res.data) {
            console.log(res,'=====uploadRes')
            const {respBody}=res.data
            if (respBody['respStatus'] === '00') {
              if (respBody['optMsgInfo'] && respBody['optMsgInfo']['optStatus'] !== '99') {
                Message({
                  message: respBody['optMsgInfo']['optMsg'],
                  type: respBody['optMsgInfo']['optStatus'],
                  duration: 5 * 1000,
                });
              }
            } else {
              Message({
                message: respBody['errMsg'],
                type: 'error',
                duration: 5 * 1000,
              });
            }
            resolve(res.data.respBody)
          }
         
        });
      })
  
    },
    async initBank(){
      return new Promise((resove,reject)=>{

        this.$p2svr(this.$api['_01_STM006PUBLIC0100'], 'RequestPoAuth', {
          optCode: 'STM006PUBLIC0101',
          payload: { bankId: '', superBankId: '' }
        }).then(res => {
          if (res) {
            //银行list
            const list = res.payload;
            const temp = [];
            const tempEn = [];
            _.each(res.payload, c => {
              temp.push({ key: c.bankId, value: c.bankName });
              tempEn.push({ key: c.bankId, value: c.bankNameEn });
            });
            this.bankObj['en_US'] = tempEn;
            this.bankObj['zh_TW'] = temp;
            let listBank = this.bankObj[this.language];
            this.bankNameReadonly = listBank.filter(
              item => item.key === this.userInfo.userAhrInstNo
            );
            resove(res)
          }
        });
      }) 
    }, 
    caseHandleResult(){
      this.$p2svr(this.$api['_01_STM006GET004'], 'RequestPoAuth', {
        payload: [{ paratype: 'caseHandleResult' }],
        optCode:'STM006GET004'
      }).then(res => {
        if (res.respStatus === '00' && res.payload) {
          console.log(res.payload, '====res.payload');
          this.caseHandleResultList = res.payload.map(item=>{
            return{
              ...item,
              value:this.language==='zh_TW'?item.value:item.valueEn
            }

          });
        }
      });
    },
    getUniImageId(){
      const {blngInstNo,userAhrOrg,usno}=this.userInfo
    
    
      var id =blngInstNo+userAhrOrg+usno+this.getCurrenTime();
    
      return id;
      
    },
    getCurrenTime(){
      var date = new Date();    
      var y = date.getFullYear();
      var m = date.getMonth()+1;
      var d = date.getDate();
      var hour=date.getHours();
      var minute=date.getMinutes();
      var second=date.getSeconds();
      return ''+y+(m<10?('0'+m):m)+(d<10?('0'+d):d)+(hour<10?('0'+hour):hour)+(minute<10?('0'+minute):minute)+(second<10?('0'+second):second);
    } ,
    getUser(basicInfo) {
      const { bankId, orgNo, caseId, caseType, status,optTp } = basicInfo;
      let url = '_01_STM001ALERT1600';
      let optCode = 'STM001GET1608';
      if (optTp === 'case') {
        url = '_01_STM001CASE1700';
        optCode = 'STM001GET1709';
      }

      
      return new Promise((resovle, reject) => {
        this.$p2svr(this.$api[url], '', {
          optCode: optCode,
          payload: {
            bankId: bankId,
            orgNo: orgNo,
            caseId: caseId,
            caseType: optTp === 'alert' ? caseType : undefined,
            status,
            taskOrgNo: '',
            transferType: 'userType',
            fucType: optTp === 'alert' ? 'alertList' : 'casealert'
          }
        })
          .then(res => {
            resovle(res.payload);
          })
          .catch(() => {});
      });
    },
    getOrg(basicInfo) {
      const { bankId, orgNo } = basicInfo;
      let url = '_01_STM001ALERT1600';
      let optCode = 'STM001GET1609';
      if (this.optTp === 'case') {
        url = '_01_STM001CASE1700';
        optCode = 'STM001GET1710';
      }
      return new Promise((resovle, reject) => {
        this.$p2svr(this.$api[url], '', {
          optCode: optCode,
          payload: { bankId, orgNo }
        })
          .then(res => {
         
            if (res.payload) {
              resovle(res.payload);
            }
          })
          .catch(() => {});
      });
    },
    closeCaseWindow(handleParams) {
      const { caseId,operate,caseIdList,bankId } = handleParams;

      if(operate!=='info'){
        this.unLock(caseIdList,bankId,operate)
      }
      let caseIdStr=caseId
      let type=''
      constantList.map(item => {
        if (item.value === operate) {
          type=item.key +'_'
        }
      });
      if(operate==='batchHandle'){
        caseIdStr=caseIdList[0]
    
      }
      const name = '/stm/caseAndTransaction/casedtls/CaseInfos'+type + caseIdStr;
      this.$bus.$emit('handleTabRemove', name);
      this.$bus.$emit('updateListSus')
    },
    autoNextFun(handleParams){
      const {caseId,operate,caseIdList}=handleParams
      const index= this.caseList.findIndex(it=>it.caseId===caseId)
      if(index===this.caseList.length){
        return 
      }
      const nextParams=this.caseList[index+1+1]
      if(index>=this.caseList.length-1){
        this.$message.warning('没有下一条')
        this.closeCaseWindow(handleParams)
        return 
      }
      let str = operate + nextParams.caseId;
      let str_Zh;
      let operateTypeCode;

      constantList.map(item => {
        if (item.value === operate) {
          str_Zh = this.$t(item.label) + nextParams.caseId;
          operateTypeCode = item.key;
        }
      });
      let path ='/stm/caseAndTransaction/casedtls/CaseInfos' +operateTypeCode +'_' +nextParams.caseId;
      let name = 'CaseInfos' + operateTypeCode + '_' + nextParams.caseId;
      const routeConfig = {
        path: path,
        name,
        component: () =>
          import('@/views/business-o/stm/views/caseAndTransaction/casedtls/CaseInfos.vue'),

        index: name,
        label: { zh_TW: str_Zh, en_US: str }
      };
      this.dyNamicRoute(routeConfig, {...nextParams,caseIdList,operate});

      
    },
    unLock(caseIdList,bankId,operate){
      this.$p2svr(this.$api['_01_STM001CASE1700'], '', {
        optCode: 'STM001MOD1704',
        payload: {
          caseIdList,
          bankId,
          fucNo: 'caseList',
          operate
        }
      }).then(res => {
        const lock = res.payload.result;

        if (lock !== '1') {
          this.$message.warning('案例解锁失败');
          return;
        }
    
      });

    }
  }
}
export default mixinList
 Index